package com.demo.common.redis.key;

import com.demo.common.constants.CommonConstants;
import org.springframework.util.Assert;

import java.util.Objects;

/**
 * <p>
 * Redis 键构造器
 * 所有的 Redis 键的
 * </p>
 *
 * @author molong
 * @date 2022/6/22
 */
public class RedisKeyGenerator {

    private RedisKeyGenerator(){}

    /*
        redis 的数据分配到公共数据空间和私有数据空间 公共数据空间：SAMC_PUBLIC, 私有空间： SAMC_对应的系统， 如 SAMC_MOBILE (移动端)
        在数据空间的前提下，根据不同的业务来存储业务数据
     */

    /**
     * 获取授权码redis key
     * @param dataSpace 数据空间
     * @param redisKey 授权码
     * @param other 其他用于组成键名的成分
     * @return String
     */
    public static String generateRedisKey(RedisDataSpace dataSpace, RedisKey redisKey, String...other){
        Assert.notNull(dataSpace, "dataSapce Can't be null");
        Assert.notNull(dataSpace, "redisKey Can't be null");
        String redisKeyName = String.join(CommonConstants.COLON, dataSpace.getVal(), redisKey.getVal());
        if(Objects.nonNull(other) && other.length > 0){
            String otherKey = String.join(CommonConstants.COLON, other);
            redisKeyName = String.join(CommonConstants.COLON, redisKeyName , otherKey);
        }
        return redisKeyName;
    }
}
